﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TcomInvoice
{
    public class Utility
    {
        public static string AddThousand(string input)
        {
            return input + "000";
        }

        public static decimal GetDecimal(string vatStr)
        {
            if (!string.IsNullOrEmpty(vatStr))
            {
                decimal vat = 0;
                decimal.TryParse(vatStr, out vat);
                
                return vat;
            }

            return 0;
        }

        public static string NumberInWord(double num)
        {
            if (num == 0) return string.Empty;

            Dictionary<char, string> dic = new Dictionary<char, string>();
            dic.Add('0', "không");
            dic.Add('1', "một");
            dic.Add('2', "hai");
            dic.Add('3', "ba");
            dic.Add('4', "bốn");
            dic.Add('5', "năm");
            dic.Add('6', "sáu");
            dic.Add('7', "bảy");
            dic.Add('8', "tám");
            dic.Add('9', "chín");
            
            List<string> result = new List<string>();
            char[] arrChar = num.ToString().ToArray();
            for (int i = 0; i < arrChar.Length; ++i)
            {
                switch ((arrChar.Length - i - 1) % 3)
                {
                    case 0: //Hàng ngàn
                        if (arrChar[i] != '0')
                        {
                            if (result.Count > 0 && result[result.Count - 1] == "mươi")
                            {
                                switch (arrChar[i])
                                {
                                    case '1':
                                        result.Add("mốt");
                                        break;
                                    case '5':
                                        result.Add("lăm");
                                        break;
                                    default:
                                        result.Add(dic[arrChar[i]]);
                                        break;
                                }
                            }
                            else if (result.Count > 0 && result[result.Count - 1] == "mười")
                            {
                                switch (arrChar[i])
                                {
                                    case '5':
                                        result.Add("lăm");
                                        break;
                                    default:
                                        result.Add(dic[arrChar[i]]);
                                        break;
                                }
                            }
                            else
                            {

                                result.Add(dic[arrChar[i]]);
                            }
                        }

                        if (arrChar[i] != '0'
                            || result[result.Count - 1] == "trăm"
                            || result[result.Count - 1] == "mươi" 
                            || result[result.Count - 1] == "mười")
                        {
                            switch (arrChar.Length - i - 1)
                            {
                                case 3:
                                case 12:
                                    result.Add("nghìn");
                                    break;
                                case 6:
                                case 15:
                                    result.Add("triệu");
                                    break;
                                case 9:
                                case 18:
                                    result.Add("tỷ");
                                    break;
                            }
                        }

                        break;
                    case 1: //Hàng chục
                        if (arrChar[i] == '1')
                        {
                            result.Add("mười");
                        }
                        else if (arrChar[i] == '0')
                        {
                            if (arrChar[i + 1] != '0')
                            {
                                result.Add("lẻ");
                            }
                        }
                        else
                        {
                            result.Add(dic[arrChar[i]]);
                            result.Add("mươi");
                        }
                        break;
                    case 2: //Hàng trăm
                        if (arrChar[i] == '0')
                        {
                            if (
                                ((i + 2 <= arrChar.Length && arrChar[i + 2] != '0') && (result[result.Count - 1] == "nghìn" || result[result.Count - 1] == "triệu" || result[result.Count - 1] == "tỷ"))
                                ||
                                ((i + 1 <= arrChar.Length && arrChar[i + 1] != '0') && (result[result.Count - 1] == "nghìn" || result[result.Count - 1] == "triệu" || result[result.Count - 1] == "tỷ"))
                               )
                            {
                                result.Add(dic[arrChar[i]]);
                                result.Add("trăm");
                            }
                        }
                        else
                        {
                            result.Add(dic[arrChar[i]]);
                            result.Add("trăm");
                        }
                        break;
                    default:                        
                        break;
                }
                
            }

            string sReturn = string.Empty;
            foreach (string w in result)
            {
                sReturn += w + " ";
            }

            return sReturn;
        }
    }
}
